package br.com.javajsf.controle;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import org.primefaces.context.RequestContext;

import br.com.javajsf.modelo.Cliente;
import br.com.javajsf.negocio.CadastradorCliente;
import br.com.javajsf.negocio.CadastradorPagamento;

@ManagedBean(name="atuClienteBean")
@ViewScoped
public class CAtualizaCliente implements Serializable {

	private static final long serialVersionUID = 1L;
	
	private Cliente cliente;
	private CadastradorCliente cliDao;
	
	private List<SelectItem> listaItemCliente;
	private List<Cliente> listCliente;
	
	private int clienteSelecionado;
	
	public CAtualizaCliente(){
		setCliente(new Cliente());
	}
	
	@PostConstruct
	public void init(){
		if (cliDao == null) {
			cliDao = new CadastradorCliente();
		}
		if(listaItemCliente == null){
			setListaItemCliente(getListaCliente());
		}
	}
	
	public List<SelectItem> getListaCliente(){
		ArrayList<SelectItem> listaIterable = new ArrayList<SelectItem>();
		listCliente = (List<Cliente>) cliDao.listarTodos();
		
		for (Cliente cliente : listCliente) {
			SelectItem item = new SelectItem(cliente.getCod(), cliente.getNome());
			listaIterable.add(item);
		}
		return listaIterable;
	}

	public void atualizaCliente(ActionEvent event){
		FacesContext context = FacesContext.getCurrentInstance();
		try {
			System.out.println("Codigo Cli: "+cliente.getCod()+cliente.getNome());
			if (cliente.getCod() != 0) {
				cliDao.atualizar(cliente);
				context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Sucesso", "Cliente Atualizado"));
			}else{
				context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro", "Cliente nao existe"));
			}
		} catch (Exception e) {
			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro", "Cliente nao foi possivel deletar o cliente"));
		}
	}
	
	public void carregarCliente(){
		cliente = (Cliente) cliDao.buscarCod(clienteSelecionado);
		System.out.println("Codigo Cli: " + cliente.getNome() + "Cod: " + cliente.getCod());
	}
	
	public String cancelar(){
		return "index.jsf?faces-redirect=true";
	}
	
	public void zeraLista(){
		RequestContext.getCurrentInstance().reset("formAtuCli");
	}

	
	//
	public List<SelectItem> getListaItemCliente() {
		return listaItemCliente;
	}

	public void setListaItemCliente(List<SelectItem> listaItemCliente) {
		this.listaItemCliente = listaItemCliente;
	}
	
	public int getClienteSelecionado() {
		return clienteSelecionado;
	}
	public void setClienteSelecionado(int clienteSelecionado) {
		this.clienteSelecionado = clienteSelecionado;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}
}
